package com.eian.boot.common.context;

import com.alibaba.ttl.TransmittableThreadLocal;
import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 数据权限上下文
 * 使用TransmittableThreadLocal支持线程池场景
 *
 * @author alex.meng
 */
public class DataScopeContext {

    private static final TransmittableThreadLocal<DataScopeInfo> CONTEXT = new TransmittableThreadLocal<>();

    /**
     * 设置数据权限信息
     */
    public static void set(DataScopeInfo dataScopeInfo) {
        CONTEXT.set(dataScopeInfo);
    }

    /**
     * 获取数据权限信息
     */
    public static DataScopeInfo get() {
        return CONTEXT.get();
    }

    /**
     * 清除数据权限信息
     */
    public static void clear() {
        CONTEXT.remove();
    }

    /**
     * 数据权限信息
     */
    @Data
    @Accessors(chain = true)
    public static class DataScopeInfo {
        /**
         * 用户ID
         */
        private Long userId;

        /**
         * 部门表别名
         */
        private String deptAlias;

        /**
         * 用户表别名
         */
        private String userAlias;

        /**
         * 是否开启数据权限
         */
        private Boolean enabled = true;

        /**
         * 数据权限SQL片段
         */
        private String sqlSegment;
    }
}

